//找出缺失和重复的数字
/*给你一个下标从 0 开始的二维整数矩阵 grid，大小为 n * n ，其中的值在 [1, n2] 范围内。除了 a 出现 两次，b 缺失 之外，每个整数都 恰好出现一次 。

任务是找出重复的数字a 和缺失的数字 b 。

返回一个下标从 0 开始、长度为 2 的整数数组 ans ，其中 ans[0] 等于 a ，ans[1] 等于 b 。
*/
class Solution {
public:
    vector<int> findMissingAndRepeatedValues(vector<vector<int>>& grid) {
        vector<int> ret(2);
        int hash[2501] = {0};
        for (auto& nums : grid) {
            for (auto& num : nums) {
                hash[num]++;
                if (hash[num] > 1)
                    ret[0] = num;
            }
        }
        int n = grid.size();
        for (int i = 1; i <= n * n; i++) {
            if (hash[i] == 0)
                ret[1] = i;
        }
        return ret;
    }
};

//换水问题
/*超市正在促销，你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始，你一共购入了 numBottles 瓶水。

如果喝掉了水瓶中的水，那么水瓶就会变成空的。

给你两个整数 numBottles 和 numExchange ，返回你 最多 可以喝到多少瓶水。
*/
class Solution {
public:
    int numWaterBottles(int numBottles, int numExchange) {
        int sum = numBottles;
        while (numBottles / numExchange) {
            int n = numBottles / numExchange;
            sum += n;
            int m = numBottles % numExchange;
            numBottles = n + m;
        }
        return sum;
    }
};